Learn in 10 minutes

Learn in 10 minutes

Изучаем MATLAB за 10 минут

MATLAB (Matrix Laboratory) — это высокоуровневый язык программирования и среда для численных вычислений, разработки алгоритмов и визуализации данных. Созданный в конце 1970-х годов, MATLAB стал незаменимым инструментом в инженерии, науке и математике.

В этом руководстве мы разберем основы MATLAB и научимся работать с этой мощной вычислительной средой.

1. Ваша первая программа на MATLAB

Создай скрипт-файл с именем hello.m или вводи команды прямо в командном окне MATLAB.

disp('Hello, World!')

Или используя функцию fprintf:

fprintf('Hello, World!\n')

Результат будет таким:

Hello, World!

Функция disp() выводит содержимое напрямую, а fprintf() предоставляет больше возможностей для форматирования, похоже на printf в языке Си.

2. Основы синтаксиса

У MATLAB есть свои правила синтаксиса, которые отличаются от большинства универсальных языков программирования. Понимание этих основ необходимо для написания чистого и поддерживаемого кода.

2.1 Комментарии

Однострочные комментарии начинаются со знака процента %:

% This is a comment
x = 10;  % This assigns 10 to x

Многострочные комментарии используют %{ и %}:

%{
This is a multi-line comment.
It can span multiple lines.
%}

2.2 Точка с запятой

Точка с запятой ; подавляет вывод результата. Без нее MATLAB показывает результат:

x = 5     % Displays: x = 5
y = 10;   % No output, but y is assigned

2.3 Чувствительность к регистру

MATLAB чувствителен к регистру. A и a — это разные переменные:

A = 5;
a = 10;
disp(A)  % Output: 5
disp(a)  % Output: 10

2.4 Имена переменных

Имена переменных должны начинаться с буквы, за которой могут следовать буквы, цифры или знаки подчеркивания:

valid_name = 1;
another_valid_name_123 = 2;
% 123invalid = 3;  % Error: cannot start with number

2.5 Базовые операции

MATLAB отлично справляется с матричными операциями. Создать матрицу очень просто:

A = [1 2 3; 4 5 6; 7 8 9]  % 3x3 matrix

Результат:

A =

     1     2     3
     4     5     6
     7     8     9

3. Переменные и типы данных

В MATLAB используется динамическая типизация. Переменные создаются при присваивании, а их тип определяется присвоенным значением.

3.1 Числовые типы

По умолчанию MATLAB хранит все числа в формате двойной точности с плавающей точкой:

% Integer
int_num = 42;

% Float
float_num = 3.14159;

% Scientific notation
sci_num = 2.5e-3;  % 0.0025

3.2 Строки

Строковые переменные используют одинарные кавычки:

str = 'Hello, MATLAB';
str2 = "Hello, MATLAB";  % String array (R2016b+)

Объединение строк:

str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2];  % 'Hello, World'

3.3 Логические (булевы) значения

Логические значения могут быть true или false:

flag = true;
result = false;

% Logical operations
a = true;
b = false;
and_result = a && b;    % false
or_result = a || b;     % true
not_result = ~a;        % false

3.4 Символьные массивы и строки

В MATLAB есть как символьные массивы, так и строковые объекты:

% Character array (older style)
char_arr = 'Hello';

% String object (modern style, R2016b+)
str_obj = "Hello";

% String objects are easier to work with
name = "Alice";
greeting = "Hello, " + name;  % Works naturally

4. Структуры данных

MATLAB предоставляет несколько структур данных для разных случаев использования.

4.1 Векторы

Вектор — это одномерный массив:

% Row vector
row_vec = [1 2 3 4 5];

% Column vector
col_vec = [1; 2; 3; 4; 5];

% Using colon operator
range_vec = 1:5;        % [1 2 3 4 5]
step_vec = 0:2:10;      % [0 2 4 6 8 10]

% linspace for evenly spaced values
lin_vec = linspace(0, 10, 5);  % [0 2.5 5 7.5 10]

4.2 Матрицы

Матрицы — это основа MATLAB:

% Direct matrix creation
A = [1 2 3; 4 5 6; 7 8 9];

% Accessing elements
element = A(2, 3);  % Returns 6 (row 2, column 3)

% Matrix operations
B = A';            % Transpose
C = A * B;         % Matrix multiplication
D = A .* B;        % Element-wise multiplication

4.3 Ячейки

Массивы ячеек могут содержать данные разных типов:

% Create a cell array
cell_arr = {1, 'hello', [1 2 3], true};

% Access cell contents using curly braces
data = cell_arr{2};  % Returns 'hello'

% Access cell using parentheses
sub_cell = cell_arr(1:2);  % Returns {1, 'hello'}

4.4 Структуры

Структуры похожи на словари с именованными полями:

% Create a structure
student.name = 'John';
student.age = 20;
student.major = 'Engineering';

% Access fields
disp(student.name);  % Output: John

% Array of structures
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;

4.5 Таблицы

Таблицы отлично подходят для табличных данных:

% Create a table
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];

T = table(Name, Age, Salary);

% Access data
disp(T.Age);
disp(T.Name{1});

5. Операторы

MATLAB предоставляет различные операторы для арифметических, сравнения и логических операций.

5.1 Арифметические операторы

a = 10;
b = 3;

sum = a + b;           % 13
diff = a - b;          % 7
prod = a * b;          % 30
quot = a / b;          % 3.3333
int_div = floor(a/b);  % 3
mod = mod(a, b);       % 1 (remainder)
pow = a ^ b;           % 1000

5.2 Поэлементные операторы

Поэлементные операторы работают с соответствующими элементами:

A = [1 2 3];
B = [4 5 6];

C = A .* B;  % Element-wise: [4 10 18]
D = A.^2;    % Element-wise square: [1 4 9]

5.3 Операторы сравнения

x = 5;
y = 10;

eq = (x == y);    % false
neq = (x ~= y);   % true
gt = (x > y);     % false
lt = (x < y);     % true
ge = (x >= y);    % false
le = (x <= y);    % true

5.4 Логические операторы

a = true;
b = false;

and_op = a & b;     % false (element-wise AND)
or_op = a | b;      % true (element-wise OR)
not_op = ~a;        % false
and_short = a && b; % false (short-circuit AND)
or_short = a || b;  % true (short-circuit OR)

6. Управление потоком выполнения

В MATLAB есть стандартные конструкции управления потоком, но синтаксис отличается от таких языков, как Python.

6.1 if-elseif-else

score = 85;

if score >= 90
    grade = 'A';
elseif score >= 80
    grade = 'B';
elseif score >= 70
    grade = 'C';
else
    grade = 'F';
end

disp(grade)  % Output: B

6.2 switch

Оператор switch сравнивает одно выражение с несколькими случаями:

day = 'Monday';

switch day
    case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
        disp('Weekday');
    case {'Saturday', 'Sunday'}
        disp('Weekend');
    otherwise
        disp('Invalid day');
end

6.3 Цикл for

Цикл for перебирает диапазон или массив:

% Iterating over a range
for i = 1:5
    disp(i);
end

% Iterating over an array
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
    disp(fruit{1});
end

% Nested loops for matrix operations
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
    for j = 1:2
        B(i, j) = A(i, j) * 2;
    end
end

6.4 Цикл while

count = 0;
while count < 5
    disp(count);
    count = count + 1;
end

6.5 Управление циклом

Оператор break выходит из цикла, а continue переходит к следующей итерации:

% Using break
for i = 1:10
    if i == 5
        break;
    end
    disp(i);
end
% Output: 1 2 3 4

% Using continue
for i = 1:5
    if mod(i, 2) == 0
        continue;  % Skip even numbers
    end
    disp(i);
end
% Output: 1 3 5

7. Ввод и вывод

7.1 Ввод данных пользователем

Используй функцию input() для получения ввода от пользователя:

% Get numeric input
num = input('Enter a number: ');

% Get string input
name = input('Enter your name: ', 's');

% Get expression input (evaluates the input)
expr = input('Enter an expression: ');

7.2 Вывод результатов

Несколько функций позволяют выводить данные:

% disp - simple display
disp('Hello');
disp([1 2 3]);

% fprintf - formatted output
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);

% sprintf - create formatted string
str = sprintf('Value: %.2f', 3.14159);
disp(str);

7.3 Спецификаторы формата

Основные спецификаторы формата в MATLAB:

% %s - string
% %d - integer
% %f - floating point
% %.2f - floating point with 2 decimal places
% %e - scientific notation

fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Output: 42 3.14 1.000000e+03

8. Функции

Функции в MATLAB обычно определяются в отдельных файлах, но анонимные функции позволяют создавать функции прямо в коде.

8.1 Анонимные функции

Анонимные функции создают простые функции без отдельных файлов:

% Single input
square = @(x) x^2;
disp(square(5));  % Output: 25

% Multiple inputs
add = @(x, y) x + y;
disp(add(3, 4));  % Output: 7

% Multiple expressions
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4));  % Output: 5

8.2 Файлы функций

Создай файл с именем myfunc.m:

function y = myfunc(x)
    y = x^2 + 1;
end

Вызов функции:

result = myfunc(5);  % Output: 26

8.3 Функции с несколькими выходными параметрами

function [sum, prod] = calc(x, y)
    sum = x + y;
    prod = x * y;
end

Вызов с несколькими выходными параметрами:

[s, p] = calc(3, 4);
disp(s);  % 7
disp(p);  % 12

8.4 Переменное количество аргументов

Используй varargin и varargout для переменного числа аргументов:

function result = sum_all(varargin)
    result = 0;
    for i = 1:length(varargin)
        result = result + varargin{i};
    end
end

% Call with any number of arguments
total = sum_all(1, 2, 3, 4, 5);  % Output: 15

9. Скриптовые файлы

Скрипты — это файлы .m, которые содержат последовательность команд MATLAB. Они работают с данными в рабочей области:

% save as myscript.m
% Calculate statistics for a dataset
data = [1 2 3 4 5 6 7 8 9 10];

mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);

fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);

10. Обработка ошибок

Используй try-catch для обработки ошибок:

try
    result = risky_operation();
catch ME
    fprintf('Error: %s\n', ME.message);
    % Handle the error
    result = 0;
end

Использование error() для генерации ошибок:

function result = divide(a, b)
    if b == 0
        error('Division by zero is not allowed');
    end
    result = a / b;
end

11. Работа с файлами

11.1 Сохранение и загрузка данных

% Save variables to file
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');

% Load variables from file
load('data.mat');

% Save to text file
writematrix(x, 'data.txt');

% Read from text file
data = readmatrix('data.txt');

11.2 Работа с текстовыми файлами

% Write to text file
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);

% Read from text file
fid = fopen('output.txt', 'r');
while ~feof(fid)
    line = fgetl(fid);
    if ischar(line)
        disp(line);
    end
end
fclose(fid);

Использование textscan для структурированного чтения:

fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);

name = C{1};
age = C{2};
score = C{3};

12. Построение графиков

Возможности построения графиков в MATLAB — одна из самых сильных сторон этой системы.

12.1 Базовое 2D построение

x = 0:0.1:2*pi;
y = sin(x);

plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;

12.2 Несколько графиков

x = 0:0.1:2*pi;

% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');

subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');

12.3 Настройка графиков

x = 0:0.1:10;
y1 = x;
y2 = x.^2;

plot(x, y1, 'b-', 'LineWidth', 2);  % Blue solid line
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Red dashed line
hold off;

xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;

12.4 Другие типы графиков

% Bar chart
bar([1 2 3 4], [10 20 15 25]);

% Histogram
data = randn(1000, 1);
histogram(data, 30);

% Scatter plot
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);